home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Language/OS - Multiplatform Resource Library
/
LANGUAGE OS.iso
/
cpp_libs
/
answrbok
/
5_5.lha
/
5_5
/
5_5c3.c
< prev
next >
Wrap
Text File
|
1993-08-08
|
1KB
|
76 lines
* Copyright (c) 1990 by AT&T Bell Telephone Laboratories, Incorporated. */
* The C++ Answer Book */
* Tony Hansen */
* All rights reserved. */
/ print out the tree in assembly format
/ WE32100 version
ifdef NONLOCAL /* DELETE */
include <intalloc.h>
include <stackalloc.h>
else /* DELETE */
include "intalloc.h" /* DELETE */
include "stackalloc.h" /* DELETE */
endif /* DELETE */
/ forward declaration of
/ assemblyprint() for binop()
tatic void assemblyprint(tree* head,
stackalloc &curloc, const intalloc *cursp);
ifdef USE8086 /* DELETE */
include "5_5c3_6.c" /* DELETE */
else /* DELETE */
include "5_5c3_W.c" /* EXPAND */
endif /* DELETE */
/ print out the appropriate assembly
/ language instructions
tatic void assemblyprint(tree* head,
stackalloc &curloc, const intalloc *cursp)
if (head)
{
switch (head->type)
{
case PLUS: case MUL: case DIV:
binop(head, curloc, cursp);
break;
case MINUS:
if (head->right)
binop(head, curloc, cursp);
else
negop(head, curloc, cursp);
break;
case NUMBER:
svnumber(head, curloc);
break;
case LP:
assemblyprint(head->left, curloc,
cursp);
break;
case RP:
case END:
default:
error("invalid type within tree");
break;
}
}
else
error("NULL node found");
oid expr:: print()
setup();
intalloc cursp(15, 15);
stackalloc stacktop(&cursp);
assemblyprint(head, stacktop, &cursp);
finishup(stacktop);